// 在这写一个订阅发布模式，用于解耦
// 思路是： 把一些函数存到一个数组里面，把一个 "事件" 与这个数组关联，然后当需要的时候，把数组取出来，里面的函数依次调用

interface IEventBus {
    eventList: { [key: string]: Function[] };
    on: (key: string, calblack: Function) => void,
    emit: (key: string) => void
}

const EventBus: IEventBus = {
    eventList: {},
    on(key: string, callback: Function) {
        // 把事件和数组关联，把函数放到数组里面
        !this.eventList[key] && (this.eventList[key] = []);
        this.eventList[key].push(callback)
    },
    emit(key: string) {
        this.eventList[key]?.forEach(callblack => callblack())
    }
}

export default EventBus;